队列-舞伴问题

所有男士女士存放在数组dancer中,按照性别分为两个队列,之后每个队列各出头元素进行配对,配对时输出出对人姓名,最后再输出剩余第一个人的名字。

算法思路:设置两个队列分别存储男女,先依次入队,只有两个队不空则不断出队配合,循环结束后,输出非空队的对头元素。

首先定义一个人的结构体:

typedef struct{
    char *name;
    char sex;
}Person,QElemType;

算法实现:

void DancePartner(Person dancers[],int n){
     /*舞伴问题
     设两个队列 分别储存男女
     依次入队 只要两个队都不空就不断出队配对
     循环结束后 输出不空的队列的队头元素*/
     int i;
     QElemType e1,e2;
     SqQueue Mdances,Fdances;
     InitQueue(Mdances);
     InitQueue(Fdances);
     for(i=0;i<n;i++){
         if(dancers[i].sex=='F')
            EnQueue(Fdances,dancers[i]);
         else
            EnQueue(Mdances,dancers[i]);
     }
     while(!QueueEmpty(Mdances)&&!QueueEmpty(Fdances)){
          DeQueue(Mdances,e1);
          DeQueue(Fdances,e2);
          printf("%s和%s跳舞了!\n",e1.name,e2.name); 
     }
     if(!QueueEmpty(Mdances)){
          DeQueue(Mdances,e1);
          printf("%s没跳舞!",e1.name);
     }
     else if(!QueueEmpty(Fdances)){
         DeQueue(Fdances,e2);
         printf("%s没跳舞!",e2.name);
     }
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值